<?php
/***********************************
* 
*       LANGUAGE_SWITCH.PHP
* 
***********************************/

define(HTDOCS,"htdocs/");

class language_switch extends module
{
    var $mTemplate;         // шаблон
    var $mTemplatePath;     // путь к файлу шаблона на сервере

   // var $mSectionTrees;     // дерево разделов сайта, вида $Arr[LANG_ID][PARENT_ID][CHILD_ID]
    var $mTmplLanguages;    // массив с языковыми версиями для вывода в шаблоне
    
    var $strMyPath;         // путь к текущему модулю, построенный из БД
    
    var $mLangRoot;			// корневая папка для текущей языковой версии
    
    var $mWorkRoot;			// корневая папка рабочей версии
    var $mTestRoot;			// корневая папка рабочей версии
    var $mWorkDN;			// доменное имя рабочей версии сайта
    var $mTestDN;			// доменное имя тестовой версии сайта
    
    function content_init()
    {
        global $common_data_server;
        
        // Переменные определяемые из админки
        $this->mTemplatePath    = $common_data_server.'module_templates/language_switch/'.$this->view_param['TEMPLATE'].'/';

		 // получаем определенные для страницы языки
	     $this->getLanguages();
		 $this->set_paths();
	     if(($this->mLangRoot = $this->get_curr_lang_root_dir()) !== "")
	     {
			// получаем полный путь себя
		    $this->strMyPath = $this->find_my_path($this->mLangRoot);
	
		    // ищим страницы для других языков
		    if($this->strMyPath !== "")
		    {
		    	$ArrLang = &$this->mTmplLanguages;
		        for($i=0;$i<count($ArrLang);$i++)
		        {
		        	if($this->mTmplLanguages[$i]['LANG_ID'] == $this->lang_id) continue;
		            $ArrLang[$i]['LINK'] = $this->find_foreign_path($ArrLang[$i]['LANG_ID'], $ArrLang[$i]['LINK']);
				}
			}
        }
        $this->parse_template();
    }
    
    //функция строит путь к от корня раздела до текущей страницы
    function find_my_path($cur_lang_dir = 'ru')
    {
		//отделяем параметры и языковую версию
    	$ArrUrl = explode("/",$_SERVER['PHP_SELF']);
    	
    	$KeyIndex = array_search($cur_lang_dir,$ArrUrl);
    	
    	if($KeyIndex !== false)
    	{		
    		//формируем путь от языковой версии
    		$KeyIndex++;
    		if($KeyIndex + 1 >= count($ArrUrl))
                return $ArrUrl[$KeyIndex];
            else 	
                return (implode("/",array_slice($ArrUrl, $KeyIndex,count($ArrUrl)-($KeyIndex+1))) . "/" . $ArrUrl[(count($ArrUrl)-1)]);
    	}
    	else
    		return false;
    }
    
    //функция формирует путь от корня до языковой версии
    function find_host_path()
    {
    	$strReturn = "";
    	if($this->version == 0)
    	{
    		//рабочая версия
    		$strReturn = $this->mWorkRoot . HTDOCS;
    	}
    	elseif ($this->version == 1)
    	{
    		//тестовая версия
    		$strReturn = $this->mTestRoot . HTDOCS;
    	}
    	else 
    		return false;
    		
    	return $strReturn;
    }
    // сопостовляет дерево разделов для др. языков 
    function find_foreign_path($lang_id, $lang = 'ru')
    {
    	// пытаемся открыть файл на сервере
    	$strHostPath= $this->find_host_path(); // путь от корня до языковой версии
    	$strRequest = "/$lang/";
		$ArrSearch 	= explode("/",$this->strMyPath);
		$strReturn	= "";
		
		for($i=0;$i<count($ArrSearch);$i++)
		{
			if($i === 0)
				$temp = '';
			else 
				$temp = '/';
				
			//путь для текущей версии
			$temp = implode("/",array_slice($ArrSearch,0,count($ArrSearch)-$i)) . $temp;
			// если папка, то смотрим ее содержимое
			if(@is_dir($strHostPath . $strRequest . $temp) && $this->has_files($strHostPath . $strRequest . $temp))
	   			return ($strRequest . $temp);
			elseif(@is_file(($strHostPath . $strRequest . $temp)))
				return ($strRequest . $temp);
		}

		//проверка на наличие корневой директории требуемой языковой версии
		if(@is_dir($strHostPath . $strRequest) && $this->has_files($strHostPath . $strRequest))
			return $strRequest;
		else 
			return false;
    }
    
    // запрос за языками, созданными для данного блока
    function getLanguages()
    {
        $strSelect = "SELECT LS.TITLE AS LANGUAGE_TITLE, L.LANG_ID,
       						 L.ROOT_DIR, LS.PIC
				  	    FROM LANGUAGE_SWITCH LS, LANG L
					   WHERE L.LANG_ID = LS.TITLE_LANG_ID
					   ORDER BY LS.LANG_ORDER";
              
        if((int)$this->view_param['DISPLAY_ORDER'] == 1)
            $strSelect .= " DESC";
           
        $ArrResult = sql_select($strSelect);
        
        if(is_array($ArrResult))
        {
            for($i=0;$i<count($ArrResult);$i++)
            {
                $tempCL = 0;
                if($this->lang_id == $ArrResult[$i]['LANG_ID'])
                    $tempCL = 1;
                
                $ArrResult[$i]['PIC']   = !empty($ArrResult[$i]['PIC']) ?  $ArrResult[$i]['PIC'] : 0;    
                    
                $this->mTmplLanguages[] = array('LINK' => $ArrResult[$i]['ROOT_DIR'], 'TITLE' => $ArrResult[$i]['LANGUAGE_TITLE'], 'LANG_ID'=> $ArrResult[$i]['LANG_ID'], 'IS_CURRENT' => $tempCL, 'PIC' => $ArrResult[$i]['PIC']);
            }          
        }
        else 
            return false;
    }
    
    function get_curr_lang_root_dir()
    {
    	if($this->mTmplLanguages)
    	{  
    		for($i=0;$i<count($this->mTmplLanguages);$i++)
	       	{
	        	if($this->mTmplLanguages[$i]['LANG_ID'] == $this->lang_id) 
	        	{
	        		return $this->mTmplLanguages[$i]['LINK'];
	        		break;
	        	}            
	       	}
    	}
		return false;    	
    }
    
    //вывод щаблона
    function parse_template()
    {
        $this->mTemplatePath .= "/language_switch.vtmpl";
        if(@file_exists($this->mTemplatePath))
        {
            $this->mTemplate = new vlibTemplate($this->mTemplatePath);  
            //указываем последний в списке элемент
            $this->mTmplLanguages[count($this->mTmplLanguages)-1]['LAST'] = 1;
            $this->mTemplate->setLoop('LANGUAGES', $this->mTmplLanguages);
           
            $this->body .= $this->mTemplate->grab();
        }
        else
        {
            $this->body .= "Файл шаблона не найден: ".$this->mTemplatePath;       
        }

    }
    
    //определяет корневые пути для тестовой и рабочих версий 
    function set_paths()
    {
        $strSelect = "SELECT HOST, PATH, TEST_HOST, TEST_PATH
				  	    FROM SITE
					   WHERE SITE_ID = " . $this->site_id;
     
        $ArrResult = sql_select($strSelect);
        
        if(is_array($ArrResult))
        {
			$this->mWorkDN 		= $ArrResult[0]['HOST'];
			$this->mWorkRoot 	= $ArrResult[0]['PATH'];
			
			$this->mTestDN 		= $ArrResult[0]['TEST_HOST'];
			$this->mTestRoot 	= $ArrResult[0]['TEST_PATH'];
			
        	return true;
        }
        else 
            return false;
       
        
     }

     //определяет пустая ли папка или в ней находсятся файлы/папки   
     function has_files($folder)
     {
         if(!is_dir($folder)) return false;

         $counter = 0;
         $dir_handle = opendir($folder);
         if($dir_handle)
         {
            while (false !== ($file = readdir($dir_handle))) 
            { 
                //исключаем ссылки на себя и вышестоящий каталог
                if($file == "." || $file == "..")
                    continue;
                else
                {
                    $counter++;
                    break; 
                }
            }
            
            closedir($dir_handle);
         }

         return $counter;
     }
     
     function get_hash_code() {return false;}
}
?>
